dashboard.test.tsx 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. import { render, screen, waitFor } from '@testing-library/react'
  2. import type { ReactNode } from 'react'
  3. import { beforeEach, describe, expect, it, vi } from 'vitest'
  4. import DashboardPage from '@/pages/project/[ref]/settings/dashboard'
  5. const { mockIsPlatform, mockRouter, mockUseFlag } = vi.hoisted(() => ({
  6. mockIsPlatform: { value: true },
  7. mockRouter: {
  8. replace: vi.fn(),
  9. },
  10. mockUseFlag: vi.fn(),
  11. }))
  12. vi.mock('common', () => ({
  13. useFlag: mockUseFlag,
  14. }))
  15. vi.mock('@/lib/constants', async () => {
  16. const actual = await vi.importActual<Record<string, unknown>>('@/lib/constants')
  17. return {
  18. ...actual,
  19. get IS_PLATFORM() {
  20. return mockIsPlatform.value
  21. },
  22. }
  23. })
  24. vi.mock('next/router', () => ({
  25. useRouter: () => mockRouter,
  26. }))
  27. vi.mock('@/components/layouts/DefaultLayout', () => ({
  28. __esModule: true,
  29. default: ({ children }: { children: ReactNode }) => <div>{children}</div>,
  30. }))
  31. vi.mock('@/components/layouts/ProjectSettingsLayout/SettingsLayout', () => ({
  32. __esModule: true,
  33. default: ({ children }: { children: ReactNode }) => <div>{children}</div>,
  34. }))
  35. vi.mock('@/components/interfaces/Settings/General/DashboardPreferences', () => ({
  36. DashboardPreferences: () => <div>DashboardPreferences</div>,
  37. }))
  38. describe('/project/[ref]/settings/dashboard', () => {
  39. beforeEach(() => {
  40. mockIsPlatform.value = true
  41. mockUseFlag.mockReturnValue(true)
  42. mockRouter.replace.mockReset()
  43. })
  44. it('renders only query preferences on platform', () => {
  45. render(<DashboardPage dehydratedState={{}} />)
  46. expect(screen.getByText('Dashboard')).toBeInTheDocument()
  47. expect(screen.getByText('DashboardPreferences')).toBeInTheDocument()
  48. expect(screen.queryByText('Edits')).not.toBeInTheDocument()
  49. })
  50. it('redirects self-hosted visits to account preferences', async () => {
  51. mockIsPlatform.value = false
  52. render(<DashboardPage dehydratedState={{}} />)
  53. await waitFor(() => {
  54. expect(mockRouter.replace).toHaveBeenCalledWith('/account/me#dashboard')
  55. })
  56. expect(screen.queryByText('DashboardPreferences')).not.toBeInTheDocument()
  57. })
  58. })